Computer systems are steadily becoming faster, more capable, and more complex. As processor technology advances, new instruction sets are developed that more efficiently execute the various tasks that are performed by these processors. In general, software is increasingly being used to perform graphics operations, streaming audio, streaming video, etc., in which it is efficient to simultaneously perform the same operation on several small sets of data in parallel. In particular, Single Instruction Multiple Data (SIMD) instructions may perform the same operation on several bytes (or nibbles, or words, etc.) that are located in the same register.
As the feature density of processors increases, allowing more circuitry to be placed in a single integrated circuit, the size of the registers that these instructions act upon may also increase. For example the size of the registers in processors has increased over the years from 8 bits, to 16 bits, to 32 bits, to 64 bits, to 128 bits, and now to 256 bits in some processors. New instruction sets have been created that use the full width of these larger registers, and new SIMD instructions may derive particular benefit from these larger registers.
An unfortunate side effect of this increase is that the installed base of legacy software applications using older instructions and smaller registers may sometimes not be compatible with software applications using the newer instructions and larger registers. For example, an instruction that is based on using 128-bit registers may save only half of the data in a 256-bit register, and therefore only those 128 bits will be restored to the register later. If the register had previously been completely filled with data by an instruction that assumed a 256-bit register, half of that data might be lost. This unexpected loss of data can have potentially catastrophic results. Trying to avoid the problem by replacing all the legacy software with new software would be prohibitively expensive in many applications.